#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
#include <string.h>

// calloc函数也用来动态内存分配
// 重点：申请成功后，会初始化为0 , 与malloc的区别
// void calloc(size_t num, size_t size)
// 函数的功能是为num个大小为size的元素开辟一块空间，并且把空间的每个字节初始化为0;

int main()
{
    int *p = calloc(10 , sizeof(int));
    if(p == NULL){   // 如果申请失败,输出错误原因
        printf("%s \n", strerror(errno)); // 报错 Not enough space， 10 替换成 INT_MAX，使用INT_MAX 需要引入limits.h
    }else {
        for (int i = 0; i < 10; i++)
        {
            printf("%d ", p[i]);    // 输出全0
        }
        
        for(int i=0;i<10;i++){
            p[i] = i;           //  这里是赋值
        }
        printf("\n");
        for (int i = 0; i < 10; i++)
        {
            printf("%d ",p[i]); //  输出 0 到 9
        }

        printf("\n");
    }
    // 当动态申请的空间不再使用的时候，就应该还给操作系统
    free(p); // free之后 p仍保留着原来的地址
    p = NULL; // 所以此处将p置为NULL
    return 0;
}